package com.qf.consumer;

import com.qf.pojo.Product;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * @Description: 公用常量
 * @Data: 2022/8/31 15:42
 * @Pacakge: com.qf.consumer
 * @ClassName: Demo
 * @Author: fan
 */
public class Demo {
    public static void main(String[] args) {
        final Product product = new Product();
        product.buyProduct("厂家");
        //基于子类的代理 cglib
        //第一个参数:目标的字节码文件对象
        //第二个参数:增强代码
        Product o = (Product) Enhancer.create(product.getClass(), new MethodInterceptor() {
            /**
             *执行被代理类的任何方法,都会执行该方法
             * @param o 代理对象的引用
             * @param method 方法对象
             * @param objects 执行对应的方法参数
             * @param methodProxy
             * @return
             * @throws Throwable
             */
            @Override
            public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
               if ("buyProduct".equals(method.getName())){
                   //执行目标方法
                   method.invoke(product,objects);
               }
                return null;
            }
        });
        o.buyProduct("代理商");
    }
}
